package com.quanjiaolian.userinfo.servlet;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

import com.quanjiaolian.tools.ResponseToJson;
import com.quanjiaolian.userinfo.service.UserInfoService;
import com.quanjiaolian.userinfo.serviceimpl.UserInfoServiceImpl;
/**
 * 处理教练认证请求
 * @author Heraon-Li
 *
 */
@SuppressWarnings("serial")
public class InsFileUpLoad extends HttpServlet {

	/**
	 * 声明Log4j变量
	 */
	public static ResourceBundle resourceBundle = null;
	static Logger logger = Logger.getLogger(InsFileUpLoad.class.getName());
	Map<String,Object> resultMap = new HashMap<String,Object>();
	UserInfoService us = new UserInfoServiceImpl();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	/**
	 * 处理教练认证请求
	 */
	@SuppressWarnings("unchecked")
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Map<String, Object> map = new HashMap<String, Object>();
		request.setCharacterEncoding("utf-8");
		// 获得磁盘文件条目工厂。
		DiskFileItemFactory factory = new DiskFileItemFactory();
		String pathstr = "/upload/IDFile/";
		//上传文件的文件名
		String filename = "";
		String newName = "";
		// 获取文件上传需要保存的路径，pathstr自定义文件夹需存在文件夹需存在。
		String path = request.getSession().getServletContext().getRealPath(
				pathstr);

		// 设置暂时存放文件的存储室，这个存储室可以和最终存储文件的文件夹不同。因为当文件很大的话会占用过多内存所以设置存储室。
		factory.setRepository(new File(path));
		// 设置缓存的大小，当上传文件的容量超过缓存时，就放到暂时存储室。
		factory.setSizeThreshold(1024 * 1024);
		// 上传处理工具类
		ServletFileUpload upload = new ServletFileUpload(factory);

		// 调用 parseRequest（request）方法 获得上传文件 FileItem 的集合list 可实现多文件上传。
		List<FileItem> list;
		try {
			list = (List<FileItem>) upload.parseRequest(request);
			for (FileItem item : list) {

				// 如果获取的表单信息是普通的文本信息。即通过页面表单形式传递来的字符串。
				if (item.isFormField()) {
					// 获取表单属性名字。
					String textname = item.getFieldName();
					// 获取用户具体输入的字符串，
					String value = item.getString();
					logger.info("教练认证表单字段名称："+textname);
					logger.info("教练认证表单字段值："+value);
					//将request传递过来的参数封装进map
					map.put(textname, value);
				}
				// 如果传入的是非简单字符串，而是图片，音频，视频等二进制文件。
				else {
					String img_name = item.getFieldName();
					System.out.println("教练认证图片表单属性名："+img_name);
					// 获取路径名
					String filepath = item.getName();
					if("".equals(filepath)){
						continue;
					}
					// 取到最后一个反斜杠。
					int start = filepath.lastIndexOf("\\");
					// 截取上传文件的 字符串名字。+1是去掉反斜杠。
					filename = filepath.substring(start + 1);
					//改名,使其在服务端名称不冲突
					newName=(new java.util.Random().nextInt(1000000))+filename.substring(filename.lastIndexOf("."));
					// 收到写到接收的文件中。
					OutputStream out = new FileOutputStream(new File(path,
							newName));
					InputStream in = item.getInputStream();

					int length = 0;
					byte[] buf = new byte[1024];
					map.put(img_name,pathstr+newName);
					logger.info("用户上传教练认证材料存放路径：" + path);
					logger.info("用户上传教练认证材料图片名称：" + newName);
					logger.info("获取文件总量的容量:" + item.getSize());
					while ((length = in.read(buf)) != -1) {
						out.write(buf, 0, length);
					}
					in.close();
					out.close();
				}
			}
			for(String key : map.keySet()){
				System.out.println(key + "--->" + map.get(key));
			}
			int i = us.updateInsFilePath(map.get("id_path").toString(),map.get("qc_path").toString(),map.get("ins_honor").toString(),Integer.parseInt(map.get("ins_id").toString()));
			if(i>0){
				resultMap.put("result", "OK");
			}else{
				resultMap.put("result", "Failed");
			}
		} catch (FileUploadException e) {
			logger.info("文件上传失败！");
			resultMap.put("result", "Upload Failed");
			e.printStackTrace();
		}catch (FileNotFoundException e) {
			logger.info("未获取到图片列表！");
			resultMap.put("result", "no images");
			e.printStackTrace();
		}catch (Exception e) {
			logger.info("参数传递有误！");
			resultMap.put("result", "Error");
			e.printStackTrace();
		}
		
		ResponseToJson.responseOutWithJson(response, resultMap);
	}

}
